package br.requisiteworks.requisito.modelo.dao;

import java.util.List;

import br.requisiteworks.modelo.Projeto;
import br.requisiteworks.requisito.modelo.Relacionamento;
import br.requisiteworks.requisito.modelo.Requisito;
import br.requisiteworks.util.persistencia.ErroBancoDados;
import br.requisiteworks.util.persistencia.ResultadoVazio;

public interface RelacionamentoDao {
	/**
	 * Carrega todos os relacionamentos que o requisito participa.
	 * 
	 * @param requisito
	 *            Que participa do relacionamento
	 * @return UMa lista com os relacionamentos
	 */
	public List<Relacionamento> selectRelacionamentos(Requisito requisito)
			throws ResultadoVazio;

	/**
	 * Seleciona do banco de dados um relacionamento entre dois requisitos
	 * 
	 * @param a
	 *            Requisito que faz parte do relacionamento
	 * @param b
	 *            Requisito que faz parte do relacionamento
	 * @return O relacionamento entre os dois requisitos
	 * @throws ResultadoVazio
	 */
	public Relacionamento select(Requisito a, Requisito b)
			throws ResultadoVazio;

	/**
	 * Seleciona todos os relacionamentos dentro de um projeto
	 * 
	 * @param projeto
	 *            Projeto cujos requisitos do relacionamento pertencem
	 * @return List com os relacionamentos do projeto
	 */
	public List<Relacionamento> select(Projeto projeto) throws ResultadoVazio;

	/**
	 * Insere um relacionamento no repositorio
	 * 
	 * @param relacionamento
	 *            Relacionamento a ser adicionado no repositorio
	 */
	public void insert(Relacionamento relacionamento) throws ErroBancoDados;

	/**
	 * Atualiza o estado de um relacionamento no repositorio
	 * 
	 * @param relacionamento
	 *            Relacionamento cujo estado sera atualizado no repositorio
	 */
	public void update(Relacionamento relacionamento) throws ErroBancoDados;

	/**
	 * Apaga um relacionamento deo repositorio
	 * 
	 * @param relacionamento
	 */
	public void delete(Relacionamento relacionamento) throws ErroBancoDados;

}
